<template>
  <div class="app-container home">

    <!--    <el-row :gutter="20">
          <el-col :sm="24" :lg="12" style="padding-left: 20px">
            <h2>若依后台管理框架</h2>
            <p>
              一直想做一款后台管理系统，看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统，她可以用于所有的Web应用程序，如网站管理后台，网站会员中心，CMS，CRM，OA等等，当然，您也可以对她进行深度定制，以做出更强系统。所有前端后台代码封装过后十分精简易上手，出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
            </p>
          </el-col>

          <el-col :sm="24" :lg="12" style="padding-left: 50px">
            <el-row>
              <el-col :span="12">
                <h2>技术选型</h2>
              </el-col>
            </el-row>
            <el-row>
              <el-col :span="6">
                <h4>后端技术</h4>
                <ul>
                  <li>SpringBoot</li>
                  <li>Spring Security</li>
                  <li>JWT</li>
                  <li>MyBatis</li>
                  <li>Druid</li>
                  <li>Fastjson</li>
                  <li>...</li>
                </ul>
              </el-col>
              <el-col :span="6">
                <h4>前端技术</h4>
                <ul>
                  <li>Vue</li>
                  <li>Vuex</li>
                  <li>Element-ui</li>
                  <li>Axios</li>
                  <li>Sass</li>
                  <li>Quill</li>
                  <li>...</li>
                </ul>
              </el-col>
            </el-row>
          </el-col>
        </el-row>-->
    <el-divider/>
    <el-row>
      <el-col :span="7">
        <el-card>
          <!--词云图-->
          <div id="articles_likes_bar" style="width: 100%;height: 300%"></div>
        </el-card>
        <el-card style="margin-top: 15px">
          <!--文章浏览量统计-->
          <div id="articles_views_bar" style="width: 100%;height: 300%"></div>
        </el-card>
      </el-col>
      <el-col :span="10">
        <el-card style="margin: auto 15px">
          <!--词云图-->
          <div id="word_cloud" style="width: 100%;height: 500%"></div>
        </el-card>
      </el-col>
      <el-col :span="7">
        <el-card>
          <!--文章浏览量统计-->
          <div id="videos_likes_bar" style="width: 100%;height: 300%"></div>
        </el-card>
        <el-card style="margin-top: 15px">
          <!--视频浏览量统计-->
          <div id="videos_views_bar" style="width: 100%;height: 300%"></div>
        </el-card>
      </el-col>
    </el-row>

  </div>
</template>

<script>
import * as echarts from 'echarts';
import 'echarts-wordcloud';
import {getWordCloudData} from "@/api/dialoghistory/dialoghistory";
import {articlesDataAnalysis} from "@/api/articles/articles";
import {videosDataAnalysis} from "@/api/videos/videos";

export default {
  name: "Index",
  data() {
    return {
      wordCloudData: [],
      // 文章数据 柱状图
      articlesTitleData: [],
      articlesViewsData: [],
      articlesLikesData:[],
      // 视频数据 柱状图
      videosTitleData:[],
      videosViewsData:[],
      videosLikesData:[],
    };
  },
  mounted() {
    this.getArticlesViews()
    this.getWordCloudData()
    this.getVideosViews()

  },
  methods: {
    // 词云图
    async getWordCloudData() {
      await getWordCloudData().then(res => {
        let data = res.rows
        this.wordCloudData = data.map(item => {
          return {
            name: item.word,
            value: item.frequency
          }
        })
      })
      this.initWordCloud()
    },
    initWordCloud() {
      const echartDom = document.getElementById('word_cloud')
      const myChart = echarts.init(echartDom)
      const option = {
        title: {
          text: '问答问题词云图'
        },
        series: [{
          type: 'wordCloud',
          shape: 'pentagon',
          keepAspect: false,
          // maskImage: maskImage,
          left: 'center',
          top: 'center',
          width: '800%',
          height: '500%',
          right: null,
          bottom: null,
          sizeRange: [12, 60],
          rotationRange: [-90, 90],
          rotationStep: 45,
          gridSize: 8,
          drawOutOfBound: false,
          layoutAnimation: true,
          textStyle: {
            fontFamily: 'sans-serif',
            fontWeight: 'bold',
            color: function () {
              return 'rgb(' + [
                Math.round(Math.random() * 160),
                Math.round(Math.random() * 160),
                Math.round(Math.random() * 160)
              ].join(',') + ')';
            }
          },
          emphasis: {
            // focus: 'self',
            textStyle: {
              textShadowBlur: 3,
              textShadowColor: '#333'
            }
          },
          //data属性中的value值却大，权重就却大，展示字体就却大
          data: this.wordCloudData
        }]

      }
      option && myChart.setOption(option)

      //随着屏幕大小调节图表
      window.addEventListener("resize", () => {
        myChart.resize();
      });
    },
    // 用户浏览量--柱状图
    async getArticlesViews() {
      await articlesDataAnalysis().then(res => {
        let data = res.rows
        this.articlesTitleData = data.map(item => {
          return item.title
        })
        this.articlesViewsData = data.map(item => {
          return item.views
        })
        this.articlesLikesData = data.map(item => {
          return item.likes
        })
      })
      this.initArticlesViewsBar()
      this.initArticlesLikesBar()
    },
    initArticlesViewsBar() {
      const chartDom = document.getElementById('articles_views_bar');
      const myChart = echarts.init(chartDom);
      let option = {
        title: {
          text: '文章浏览量排行'
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow'
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            data: this.articlesTitleData,
            axisTick: {
              alignWithLabel: true
            }
          }
        ],
        yAxis: [
          {
            type: 'value'
          }
        ],
        series: [
          {
            name: 'Direct',
            type: 'bar',
            barWidth: '60%',
            data: this.articlesViewsData
          }
        ]
      };


      option && myChart.setOption(option);
    },
    initArticlesLikesBar() {
      const chartDom = document.getElementById('articles_likes_bar');
      const myChart = echarts.init(chartDom);
      let option = {
        title: {
          text: '文章点赞量排行'
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow'
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            data: this.articlesTitleData,
            axisTick: {
              alignWithLabel: true
            }
          }
        ],
        yAxis: [
          {
            type: 'value'
          }
        ],
        series: [
          {
            name: 'Direct',
            type: 'bar',
            barWidth: '60%',
            data: this.articlesLikesData
          }
        ]
      };


      option && myChart.setOption(option);
    },
    // 视频浏览量统计
    async getVideosViews() {
      await videosDataAnalysis().then(res => {
        let data = res.rows
        this.videosTitleData = data.map(item => {
          return item.title
        })
        this.videosViewsData = data.map(item => {
          return item.views
        })
        this.videosLikesData = data.map(item => {
          return item.likes
        })
      })
      this.initVideosViewsBar()
      this.initVideosLikesBar()
    },
    initVideosViewsBar() {
      const chartDom = document.getElementById('videos_views_bar');
      const myChart = echarts.init(chartDom);
      let option = {
        title: {
          text: '视频浏览量排行'
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow'
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            data: this.videosTitleData,
            axisTick: {
              alignWithLabel: true
            }
          }
        ],
        yAxis: [
          {
            type: 'value'
          }
        ],
        series: [
          {
            name: 'Direct',
            type: 'bar',
            barWidth: '60%',
            data: this.videosViewsData
          }
        ]
      };

      option && myChart.setOption(option);
    },
    initVideosLikesBar() {
      const chartDom = document.getElementById('videos_likes_bar');
      const myChart = echarts.init(chartDom);
      let option = {
        title: {
          text: '视频点赞量排行'
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow'
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            data: this.videosTitleData,
            axisTick: {
              alignWithLabel: true
            }
          }
        ],
        yAxis: [
          {
            type: 'value'
          }
        ],
        series: [
          {
            name: 'Direct',
            type: 'bar',
            barWidth: '60%',
            data: this.videosLikesData
          }
        ]
      };

      option && myChart.setOption(option);
    }
  }
};
</script>

<style scoped lang="scss">
.home {
  blockquote {
    padding: 10px 20px;
    margin: 0 0 20px;
    font-size: 17.5px;
    border-left: 5px solid #eee;
  }

  hr {
    margin-top: 20px;
    margin-bottom: 20px;
    border: 0;
    border-top: 1px solid #eee;
  }

  .col-item {
    margin-bottom: 20px;
  }

  ul {
    padding: 0;
    margin: 0;
  }

  font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  color: #676a6c;
  overflow-x: hidden;

  ul {
    list-style-type: none;
  }

  h4 {
    margin-top: 0px;
  }

  h2 {
    margin-top: 10px;
    font-size: 26px;
    font-weight: 100;
  }

  p {
    margin-top: 10px;

    b {
      font-weight: 700;
    }
  }

  .update-log {
    ol {
      display: block;
      list-style-type: decimal;
      margin-block-start: 1em;
      margin-block-end: 1em;
      margin-inline-start: 0;
      margin-inline-end: 0;
      padding-inline-start: 40px;
    }
  }
}
</style>

